(defmacro mywhile (test &rest body)
  `(loop (unless ,test (return nil))
      ,@body))

(defun isodd (nums-list)
  (loop while nums-list
       collecting (oddp (pop nums-list))))

(defmacro odd (&rest nums)
  `(if (and ,@(isodd nums)) t nil))

(defun test.lisp ()
  (format nil "test.lisp"))

;;;change to hash map is better
(defvar *path-db* nil)
(defun publish (&key path fun-name)
  (push (list :path path :fun-name fun-name) *path-db*))
(defmacro run-fun (fun-c &rest args)
  (dolist (path *path-db*)
    (if (equal fun-c (getf path :path))
	(return-from run-fun `(,(getf path :fun-name) ,@args))))) 

(defun add (&key (a 0) (b 0) (c 0))
  (+ a b c))
(defun mul (&key (a 0) (b 0) (c 0))
  (* a b c))
